
// trait.h
#ifndef ANYTHING_SRC_TRAITS_H_
#define ANYTHING_SRC_TRAITS_H_

namespace trait
{
	template <class T>
	struct iterator_traits 
	{
		typedef T                value_type;
		typedef T*               pointer;
		typedef T&               reference;
		typedef unsigned int     difference_type;
		typedef const T*		 const_pointer;
		typedef const T&         const_reference;
	};

	template <class T>
	struct iterator_traits<T*> 
	{
		typedef T                value_type;
		typedef T*               pointer;
		typedef T&               reference;
		typedef unsigned int     difference_type;
		typedef const T*		 const_pointer;
		typedef const T&         const_reference;
	};

	template <class T>
	struct iterator_traits<const T*> 
	{
		typedef T                value_type;
		typedef T*               pointer;
		typedef T&               reference;
		typedef unsigned int     difference_type;
		typedef const T*         const_pointer;
		typedef const T&         const_reference;
	};

	struct true_type {};
	struct false_type {};
}






#endif  // ANYTHING_SRC_TRAITS_H_